home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / units / joystick.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-07-02  |  8.7 KB  |  268 lines

  1. UNIT JoyStick;
  2.  
  3. INTERFACE
  4.  
  5.  USES
  6.    Crt;
  7.  
  8.  VAR
  9.    GlobalInit:BOOLEAN;
  10.    XPos,YPos,MaxX,MaxY,MinX,MinY:INTEGER;
  11.    OV1,NH1,EJ1:STRING;
  12.    OV2,NH2,EJ2:STRING;
  13.    DeltaX1,DeltaY1,GrenseX1a,GrenseX1b,GrenseY1a,GrenseY1b:INTEGER;
  14.    DeltaX2,DeltaY2,GrenseX2a,GrenseX2b,GrenseY2a,GrenseY2b:INTEGER;
  15.    X1a,X1b,Y1a,Y1b:INTEGER;
  16.    X2a,X2b,Y2a,Y2b:INTEGER;
  17.    XRes1,YRes1:BYTE;
  18.    XRes2,YRes2:BYTE;
  19.  
  20.  
  21. {═════════════════════════════════  Global  ═════════════════════════════════}
  22.  PROCEDURE Grenser(X1,Y1,X2,Y2:INTEGER);
  23.  PROCEDURE VisPos(ForSinkelse:INTEGER);
  24.  PROCEDURE SettPos(X,Y:INTEGER);
  25.  PROCEDURE HentXY(VAR X,Y:INTEGER);
  26. {═════════════════════════════════Joystick 1═════════════════════════════════}
  27.  PROCEDURE JoyStick1(VAR X,Y,K1,K2:INTEGER);
  28.  FUNCTION  Stick1(VAR XRet,YRet:INTEGER):INTEGER;
  29.  PROCEDURE Initier1(A,B:BYTE);
  30.  PROCEDURE FinJuster1;
  31. {═════════════════════════════════Joystick 2═════════════════════════════════}
  32.  PROCEDURE JoyStick2(VAR X,Y,K1,K2:INTEGER);
  33.  FUNCTION  Stick2(VAR XRet,YRet:INTEGER):INTEGER;
  34.  PROCEDURE Initier2(A,B:BYTE);
  35.  PROCEDURE FinJuster2;
  36. {═════════════════════════════════Programmer═════════════════════════════════}
  37.  
  38. IMPLEMENTATION
  39.  
  40.  
  41. {═════════════════════════════════  Global  ═════════════════════════════════}
  42.  
  43.  PROCEDURE Grenser(X1,Y1,X2,Y2:INTEGER);
  44.   BEGIN
  45.     MinX:=X1; MaxX:=X2;
  46.     MinY:=Y1; MaxY:=Y2;
  47.     GlobalInit:=TRUE;
  48.   END;
  49.  
  50.  PROCEDURE VisPos(ForSinkelse:INTEGER);
  51.   VAR
  52.     A:BYTE;
  53.   BEGIN
  54.     IF GlobalInit THEN
  55.      BEGIN
  56.        A:=Mem[$B800:(XPos+YPos*80)*2-161];
  57.        Mem[$B800:(XPos+YPos*80)*2-161]:=
  58.        (NOT Mem[$B800:(XPos+YPos*80)*2-161]) XOR 128;
  59.        Delay(Forsinkelse);
  60.        Mem[$B800:(XPos+YPos*80)*2-161]:=A;
  61.      END;
  62.   END;
  63.  
  64.  PROCEDURE SettPos(X,Y:INTEGER);
  65.   BEGIN
  66.     XPos:=X; YPos:=Y;
  67.   END;
  68.  
  69.  PROCEDURE HentXY(VAR X,Y:INTEGER);
  70.   BEGIN
  71.     IF GlobalInit THEN
  72.      BEGIN
  73.        X:=XPos;
  74.        Y:=YPos;
  75.      END
  76.     ELSE
  77.      BEGIN
  78.        X:=-1;
  79.        Y:=-1;
  80.      END;
  81.   END;
  82.  
  83. {═════════════════════════════════Joystick 1═════════════════════════════════}
  84.  
  85.  PROCEDURE JoyStick1(VAR X,Y,K1,K2:INTEGER);
  86.   BEGIN INLINE
  87.    ($BA/$01/$02/$EC/$A8/$03/$75/$FB/$B9/$2C/$01/$FA/$EE/$EC/$A8/$01/
  88.     $E0/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/x/$26/$89/$1D/$2B/$DB/$A8/$10/
  89.     $75/$03/$83/$C3/$01/$C4/$BE/k1/$26/$89/$1D/$2B/$DB/$A8/$20/$75/$03/
  90.     $83/$C3/$01/$C4/$BE/k2/$26/$89/$1D/$EC/$A8/$03/$75/$FB/$B9/$2C/$01/
  91.     $EE/$EC/$A8/$02/$E0/$FB/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/y/$26/$89/$1D);
  92.   END;
  93.  
  94.  FUNCTION Stick1(VAR XRet,YRet:INTEGER):INTEGER;
  95.   VAR
  96.     X,Y,K1,K2:INTEGER;
  97.   BEGIN
  98.     JoyStick1(X,Y,K1,K2);
  99.     Stick1:=K1+K2*2;
  100.     XRet:=0; YRet:=0;
  101.     IF X<GrenseX1a THEN XRet:=-1;
  102.     IF X>GrenseX1b THEN XRet:=+1;
  103.     IF Y<GrenseY1a THEN YRet:=-1;
  104.     IF Y>GrenseY1b THEN YRet:=+1;
  105.     IF GlobalInit THEN
  106.      BEGIN
  107.        XPos:=XPos+XRet;
  108.        YPos:=YPos+YRet;
  109.        IF XPos<MinX THEN XPos:=MinX;
  110.        IF YPos<MinY THEN YPos:=MinY;
  111.        IF XPos>MaxX THEN XPos:=MaxX;
  112.        IF YPos>MaxY THEN YPos:=MaxY;
  113.      END;
  114.   END;
  115.  
  116.  PROCEDURE Initier1(A,B:BYTE);
  117.   VAR
  118.     K1,K2:INTEGER;
  119.   BEGIN
  120.     WRITELN; WRITELN(OV1); REPEAT Joystick1(X1a,Y1a,K1,K2); UNTIL K1=1;
  121.     WRITELN; WRITELN(NH1); REPEAT Joystick1(X1b,Y1b,K1,K2); UNTIL K2=1;
  122.     DeltaX1:=X1b-X1a; DeltaY1:=Y1b-Y1a; XRes1:=A; YRes1:=B;
  123.     GrenseX1a:=TRUNC(X1a+DeltaX1/XRes1); GrenseX1b:=TRUNC(X1b-DeltaX1/XRes1);
  124.     GrenseY1a:=TRUNC(Y1a+DeltaY1/YRes1); GrenseY1b:=TRUNC(Y1b-DeltaY1/YRes1);
  125.     WRITELN(EJ1);
  126.   END;
  127.  
  128.  PROCEDURE FinJuster1;
  129.   VAR
  130.     Knapp,Jx,Jy:INTEGER;
  131.     Tast:CHAR;
  132.     Ferdig:BOOLEAN;
  133.   BEGIN
  134.     TEXTMODE(CO80+Font8x8); TextAttr:=White+Blue*16; ClrScr;
  135.     Grenser(1,1,80,50); SettPos(40,25); Ferdig:=FALSE;
  136.     GotoXY(1,1); WRITE('Vertikalt  :');
  137.     GotoXY(1,2); WRITE('Hosisontalt:');
  138.     GotoXY(1,3); WRITE('Knapper    :');
  139.     GotoXY(1,4); WRITE('X F¢lsomhet:');
  140.     GotoXY(1,5); WRITE('Y F¢lsomhet:');
  141.     GotoXY(1,7); WRITE('O : Y f¢lsomhet opp (Minker)');
  142.     GotoXY(1,8); WRITE('N : Y f¢lsomhet ned ( ¥ker )');
  143.     GotoXY(1,9); WRITE('H : X f¢lsomhet opp (Minker)');
  144.     GotoXY(1,10); WRITE('V : X f¢lsomhet ned ( ¥ker )');
  145.     GotoXY(1,12); WRITE('Trykk ESC for å avslutte!');
  146.     REPEAT
  147.       Knapp:=Stick1(Jx,Jy);
  148.       VisPos(10);
  149.       GotoXY(15,1); WRITE('   '); GotoXY(15,1); WRITE(Jy);
  150.       GotoXY(15,2); WRITE('   '); GotoXY(15,2); WRITE(Jx);
  151.       GotoXY(15,3); WRITE('   '); GotoXY(15,3); WRITE(Knapp);
  152.       GotoXY(15,4); WRITE('   '); GotoXY(15,4); WRITE(XRes1);
  153.       GotoXY(15,5); WRITE('   '); GotoXY(15,5); WRITE(YRes1);
  154.       IF KeyPressed THEN
  155.        BEGIN
  156.          Tast:=ReadKey;
  157.          IF ORD(Tast)=27 THEN Ferdig:=TRUE;
  158.          Tast:=UPCASE(Tast);
  159.          IF Tast='O' THEN DEC(YRes1);
  160.          IF Tast='N' THEN INC(YRes1);
  161.          IF Tast='H' THEN DEC(XRes1);
  162.          IF Tast='V' THEN INC(XRes1);
  163.          GrenseX1a:=TRUNC(X1a+DeltaX1/XRes1);
  164.          GrenseX1b:=TRUNC(X1b-DeltaX1/XRes1);
  165.          GrenseY1a:=TRUNC(Y1a+DeltaY1/YRes1);
  166.          GrenseY1b:=TRUNC(Y1b-DeltaY1/YRes1);
  167.        END;
  168.     UNTIL Ferdig;
  169.     GlobalInit:=FALSE;
  170.   END;
  171.  
  172. {═════════════════════════════════Joystick 1═════════════════════════════════}
  173.  PROCEDURE JoyStick2(VAR X,Y,K1,K2:INTEGER);
  174.   BEGIN INLINE
  175.    ($BA/$01/$02/$EC/$A8/$0C/$75/$FB/$B9/$2C/$01/$FA/$EE/$EC/$A8/$04/
  176.     $E0/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/x/$26/$89/$1D/$2B/$DB/$A8/$40/
  177.     $75/$03/$83/$C3/$01/$C4/$BE/k1/$26/$89/$1D/$2B/$DB/$A8/$80/$75/$03/
  178.     $83/$C3/$01/$C4/$BE/k2/$26/$89/$1D/$EC/$A8/$0C/$75/$FB/$B9/$2C/$01/
  179.     $EE/$EC/$A8/$08/$E0/$FB/$FB/$BB/$2C/$01/$2B/$D9/$C4/$BE/y/ $26/$89/$1D);
  180.   END;
  181.  
  182.  FUNCTION Stick2(VAR XRet,YRet:INTEGER):INTEGER;
  183.   VAR
  184.     X,Y,K1,K2:INTEGER;
  185.   BEGIN
  186.     JoyStick2(X,Y,K1,K2);
  187.     Stick2:=K1+K2*2;
  188.     XRet:=0; YRet:=0;
  189.     IF X<GrenseX2a THEN XRet:=-1;
  190.     IF X>GrenseX2b THEN XRet:=+1;
  191.     IF Y<GrenseY2a THEN YRet:=-1;
  192.     IF Y>GrenseY2b THEN YRet:=+1;
  193.     IF GlobalInit THEN
  194.      BEGIN
  195.        XPos:=XPos+XRet;
  196.        YPos:=YPos+YRet;
  197.        IF XPos<MinX THEN XPos:=MinX;
  198.        IF YPos<MinY THEN YPos:=MinY;
  199.        IF XPos>MaxX THEN XPos:=MaxX;
  200.        IF YPos>MaxY THEN YPos:=MaxY;
  201.      END;
  202.   END;
  203.  
  204.  PROCEDURE Initier2(A,B:BYTE);
  205.   VAR
  206.     K1,K2:INTEGER;
  207.   BEGIN
  208.     WRITELN; WRITELN(OV2); REPEAT Joystick2(X2a,Y2a,K1,K2); UNTIL K1=1;
  209.     WRITELN; WRITELN(NH2); REPEAT Joystick2(X2b,Y2b,K1,K2); UNTIL K2=1;
  210.     DeltaX2:=X2b-X2a; DeltaY2:=Y2b-Y2a; XRes2:=A; YRes2:=B;
  211.     GrenseX2a:=TRUNC(X2a+DeltaX2/XRes2); GrenseX2b:=TRUNC(X2b-DeltaX2/XRes2);
  212.     GrenseY2a:=TRUNC(Y2a+DeltaY2/YRes2); GrenseY2b:=TRUNC(Y2b-DeltaY2/YRes2);
  213.     WRITELN(EJ2);
  214.   END;
  215.  
  216.  PROCEDURE FinJuster2;
  217.   VAR
  218.     Knapp,Jx,Jy:INTEGER;
  219.     Tast:CHAR;
  220.     Ferdig:BOOLEAN;
  221.   BEGIN
  222.     TEXTMODE(CO80+Font8x8); TextAttr:=White+Blue*16; ClrScr;
  223.     Grenser(1,1,80,50); SettPos(40,25); Ferdig:=FALSE;
  224.     GotoXY(1,1); WRITE('Vertikalt  :');
  225.     GotoXY(1,2); WRITE('Hosisontalt:');
  226.     GotoXY(1,3); WRITE('Knapper    :');
  227.     GotoXY(1,4); WRITE('X F¢lsomhet:');
  228.     GotoXY(1,5); WRITE('Y F¢lsomhet:');
  229.     GotoXY(1,7); WRITE('O : Y f¢lsomhet opp (Minker)');
  230.     GotoXY(1,8); WRITE('N : Y f¢lsomhet ned ( ¥ker )');
  231.     GotoXY(1,9); WRITE('H : X f¢lsomhet opp (Minker)');
  232.     GotoXY(1,10); WRITE('V : X f¢lsomhet ned ( ¥ker )');
  233.     GotoXY(1,12); WRITE('Trykk ESC for å avslutte!');
  234.     REPEAT
  235.       Knapp:=Stick2(Jx,Jy);
  236.       VisPos(10);
  237.       GotoXY(15,1); WRITE('   '); GotoXY(15,1); WRITE(Jy);
  238.       GotoXY(15,2); WRITE('   '); GotoXY(15,2); WRITE(Jx);
  239.       GotoXY(15,3); WRITE('   '); GotoXY(15,3); WRITE(Knapp);
  240.       GotoXY(15,4); WRITE('   '); GotoXY(15,4); WRITE(XRes2);
  241.       GotoXY(15,5); WRITE('   '); GotoXY(15,5); WRITE(YRes2);
  242.       IF KeyPressed THEN
  243.        BEGIN
  244.          Tast:=ReadKey;
  245.          IF ORD(Tast)=27 THEN Ferdig:=TRUE;
  246.          Tast:=UPCASE(Tast);
  247.          IF Tast='O' THEN DEC(YRes2);
  248.          IF Tast='N' THEN INC(YRes2);
  249.          IF Tast='H' THEN DEC(XRes2);
  250.          IF Tast='V' THEN INC(XRes2);
  251.          GrenseX2a:=TRUNC(X2a+DeltaX2/XRes2);
  252.          GrenseX2b:=TRUNC(X2b-DeltaX2/XRes2);
  253.          GrenseY2a:=TRUNC(Y2a+DeltaY2/YRes2);
  254.          GrenseY2b:=TRUNC(Y2b-DeltaY2/YRes2);
  255.        END;
  256.     UNTIL Ferdig;
  257.     GlobalInit:=FALSE;
  258.   END;
  259. {══════════════════════════════════Oppstart══════════════════════════════════}
  260. BEGIN
  261.   OV1:='Skyv Joystick #1 til ¥vre Venstre hj¢rne, trykk knapp 1 .';
  262.   NH1:='Skyv Joystick #1 til Nedre H¢yre  hj¢rne, trykk knapp 2 .';
  263.   EJ1:='Joystick #1 skulle nå være godt justert.';
  264.   OV2:='Skyv Joystick #2 til ¥vre Venstre hj¢rne, trykk knapp 1 .';
  265.   NH2:='Skyv Joystick #2 til Nedre H¢yre  hj¢rne, trykk knapp 2 .';
  266.   EJ2:='Joystick #2 skulle nå være godt justert.';
  267.   GlobalInit:=FALSE;
  268. END.